/* Copyright (C) 2021 Rain */

/* This file is part of XNIX. */

/* 
  XNIX is free software: you can redistribute it and/or modify 
  it under the terms of the GNU General Public License as published by 
  the Free Software Foundation, either version 3 of the License, or 
  (at your option) and later version. 
*/

/*
  XNIX is distributed in the hope that it will be useful, 
  but WITHOUT ANY WARRANTY; without even the implied warranty of 
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 
  GNU General Public License for more details. 
*/

/*
  You should have received a copy of the GNU General Public License 
   along with XNIX. If not, see <https://www.gnu.org/licenses/>.  
*/




#ifndef _BLOCK_H
#define _BLOCK_H

#include <kernel/types.h>
#include <kernel/errno.h>

#include <kernel/sched.h>


struct req_node {
	struct blkdev *dev;

	char *buffer;
	struct task *waiting;
};


struct blkdev {
	__uint8_t pci_class;
	__uint8_t pci_subclass;

#define DEVMAJOR_MM 	0
#define DEVMAJOR_HD 	1
#define DEVMAJOR_UNK 	2

	__uint8_t dev;

#define BLKNIL 		0
#define BLKREAD 	1
#define BLKWRITE 	2

	int (* send_cmd) (int cmd, struct req_node *node);
};


#endif

